Strata Data Conference 是全球具有影响力的技术峰会,本届于 2019 年 9 月 23 - 26 日在美国纽约举办。峰会汇集了全球范围内的大数据、云计算、机器学习等前沿科技团队,演讲嘉宾来自 Google,IBM,Microsoft,AWS,Intel,Oracle,Facebook,Cloudera 等企业的技术团队。
9 月 25 日,中国电信甜橙金融首席科学家、大数据部人工智能研究院院长谢巍盛和 StreamNative CTO 翟佳分享了 Apache Pulsar 在甜橙金融的应用:How Orange Financial combats financial fraud over 50M transactions a day using Apache Pulsar。分享嘉宾向行业展示甜橙金融在大数据风控场景下的创新实践,成为现场各方关注的焦点。
甜橙金融成立于 2011 年 3 月,是互联网金融行业领先的创新企业,是中国人民银行核准的第三方支付机构、中国证监会核准的基金支付结算机构。
甜橙金融作为中国电信布局互联网金融科技生态圈的主体,旗下设翼支付、甜橙信用、橙分期、甜橙小贷、甜橙理财、交费易等子品牌。目前甜橙金融有超 5 亿注册用户,每月活跃用户超过 4 千万。
其中翼支付已经成为当前国内第二大个人移动支付 APP。依托中国电信强大平台优势和巨大用户体量,甜橙金融多年来专注在大数据、人工智能等前沿技术领域的研发探索,投入大量资源,在大数据反欺诈领域形成了独特体系,并取得了业界瞩目的成果。
当前业内互联网金融公司每天都会面临金融诈骗,例如身份盗窃、洗钱、会员欺诈、商户欺诈等。随着中国用户手机支付的应用场景和普及率逐渐增大,对金融安全的控制就需要更加重视。下图展示了国内移动支付市场近年的增长情况。
移动支付在电商,金融,交通出行及零售等各领域的渗透率也在逐年升高。简单便捷的支付手段是移动支付得以快速发展的主要原因,扫码支付是当前最常用的移动支付方式,用户通过扫码就能在瞬间完成一笔交易。
移动支付带来便利的同时,也为后台的风控系统带来了严峻的挑战。看似瞬时完成的交易,其背后往往经过了成百上千的策略运算,用以控制金融风险。在手机支付业务上,甜橙金融遇到如下挑战:
- 高并发:每天的交易量超过 5000 万,每天处理 10 亿+ 事件(高峰期达到 35K/s)。
- 大量的批处理作业和流处理作业。例如要计算一个商户上个月的交易总量,需要统计过去 29 天的交易总量(批处理)和当天的交易总量(流处理)。
在这类场景下 Lambda 是业内绝大多数公司采用的架构。之前,甜橙金融也采用了 Lambda 架构进行风险指标开发,诸如每月平均消费频率和金额数,最后一分钟、最后一个月和一年的登录频率或是两次转账之间的时间间隔等等。
其中一些指标需要回溯大量历史数据,这些数据存储在 Hive 中,并且通常以批处理方式计算(例如,在这种情况下为 Presto)。一些指标取决于当前交易中的数据,并且当前交易的决策需要这些指标;实时交易数据存储在消息队列(例如 Kafka)中,流计算被广泛采用(例如 Spark 流)。
Lambda 采用这种体系结构需要维护 Kafka、Hive、Spark、Flink 等多个集群,也要求 Engineer 在 Scala、Java 和 SQL 等语言间来回切换。Kafka 尝试通过仅保留一个代码库而不是为 Lambda 体系结构中的每个批次管理一个代码库和速度层来简化。
这种架构的复杂性主要围绕必须处理流中的数据,例如处理重复事件、交叉引用事件或维护顺序,这些操作通常在批处理中更容易进行。尽管如此,公司仍在寻求一种解决方案,该解决方案可以统一数据存储,计算引擎和编程语言,降低系统复杂度进而能够在开发中提升实际生产效率并降低成本。
为了应对目前的业务挑战,简化业务流程,严格控制金融风险,甜橙金融对 Apache Pulsar 进行了调研。
1.云原生架构和以 Segment 为中心的分片存储Apache Pulsar 采用了计算和存储分层的架构和以 Segment 为中心的分片存储。Pulsar 集群由两层组成:无状态服务层,由一组接受和传递消息的 broker 组成;分布式存储层,由一组名为 bookies 的 Apache BookKeeper 存储节点组成,具备高可用、强一致、低延时的特点。
Pulsar 基于主题分区(Topic partition)的逻辑概念进行主题数据的存储。Kafka 的物理存储也是以分区为单位,每个 partition 必须作为一个整体(一个目录)被存储在一个 broker 上,而 Pulsar 的每个主题分区本质上都是存储在 BookKeeper 上的分布式日志,每个日志又被分成分段(Segment)。每个 Segment 作为 BookKeeper 上的一个 Ledger,均匀分布并存储在多个 bookie 中。
存储分层的架构和以 Segment 为中心的分片存储是 Pulsar 的两个关键设计理念。因此 Pulsar 有很多重要的优势:无限制的主题分区、存储即时扩展,无需数据迁移、无缝 broker 故障恢复、无缝集群扩展、无缝的存储(Bookie)故障恢复和独立的可扩展性。
2.Pulsar 提供了两种级别的 API 读,发布-订阅来处理流计算,Segment 处理批计算。在流计算中,Pulsar 基于发布订阅模式(pub-sub)构建,生产者(producer)发布消息(message)到主题(topic),消费者可以订阅主题,处理收到的消息,并在消息处理完成后发送确认(Ack)。Pulsar 提供了四种订阅类型,它们可以共存在同一个主题上,以订阅名进行区分:- 独享(exclusive)订阅——一个订阅名下同时只能有一个消费者。
- 共享(shared)订阅——可以由多个消费者订阅,每个消费者接收其中一部分消息。
- 失效备援(failover)订阅——允许多个消费者连接到同一个主题,但只有一个消费者能够接收消息。只有在当前消费者发生失效时,其他消费者才开始接收消息。
- 键划分(key-shared)订阅——多个消费者连接到同一主题,相同 Key 总会发送给同一个消费者。
在批处理过程中,Pulsar 以 Segment 为中心,从存储层(BookKeeper 或分层存储)读取数据。
经过深入调研后,甜橙金融采用了基于 Apache Pulsar 的数据处理架构:使用 Pulsar 存储数据,使用 Spark 作为计算引擎,采用统一的 API 。>>> 🙋Pulsar + Spark 结合使用 <<<
Spark 2.2.0 版本 Structured Streaming 正式发布后,为 Spark 的批流统一提供了基础。对于实时数据,可以通过 Spark Structured Streaming 来读取 Pulsar 中的数据。对于历史数据,可以通过 Spark SQL 来交互查询 Pulsar 中的数据。
在对系统架构的升级过程中,主要涉及到两个方面的内容。
一方面是把原有 λ 架构中的数据导入到 Pulsar 中。对于实时数据处理中 Kafka 数据的导入,使用了 StreamNative 开源的 pulsar-io-kafka(https://github.com/streamnative/pulsar-io-kafka) 项目,把 Kakfa 中的数据读出并写入到 Pulsar 中。对于批处理中 Hive 数据的导入,使用了 StreamNative 开源的另一个项目 pulsar-spark(https://github.com/streamnative/pulsar-spark),直接利用 Spark 来查询 Hive 中的数据,并将查询结果以 AVRO 格式的 Schema 存入 Pulsar 中。另一方面是采用新的架构来处理 Pulsar 中的带有 AVRO 信息的记录,用 Spark Structured Streaming 做实时处理,用 Spark SQL 进行批处理和交互式查询。
这种新的解决方案具备统一的计算引擎,数据存储及开发语言,相比于 Lambda 极大降低了系统复杂度,具体优势如下:
- 复杂度下降了33%(集群数量从 6 个减少到 4 个)
- 数据科学家的生产效率提高了 11 倍(支持流 SQL )
智慧金融成为大势所趋,协作共赢成为互联网金融生态圈发展的主旋律,甜橙金融以创新的金融科技成果结合场景需求,为商户、消费者带来安全、便捷、高效的服务,为行业风控保驾护航。
Apache Pulsar 是一个云原生的消息流系统,具有多层架构,采用分片(Segment)为中心的存储。Pulsar 支持两种级别的读 API:发布/订阅+ Segment;提供统一数据视图。把 Pulsar 和 Spark 结合使用,可以统一数据处理,简化操作。
作者 | 谢巍盛、翟佳审校 | Growth编辑 | Sylvia
📣Join Pulsar 📣
Apache Pulsar 鼓励大家参与开源社区,欢迎大家积极提交 PR,我们会统计 Pulsar contributors ,后期还有礼品赠送鸭🎁。
🙋关于此次演讲分享的 PPT,已上传至示说网等平台,点击「阅读原文」获取 PPT 文件。